package ar.uba.fi.algo3.algoTank.model.tanques;

import ar.uba.fi.algo3.algoTank.model.Objeto;
import ar.uba.fi.algo3.algoTank.model.Vector;
import ar.uba.fi.algo3.algoTank.model.armas.Ametralladora;
import ar.uba.fi.algo3.algoTank.model.armas.Arma;
import ar.uba.fi.algo3.algoTank.model.bonus.Bonus;
import ar.uba.fi.algo3.algoTank.model.cuarteles.Cuartel;
import ar.uba.fi.algo3.algoTank.model.escenarios.Escenario;
import ar.uba.fi.algo3.algoTank.model.formas.Figura;
import ar.uba.fi.algo3.algoTank.model.formas.Rectangulo;
import ar.uba.fi.algo3.algoTank.util.Constantes;
import ar.uba.fi.algo3.titiritero.ObjetoVivo;

public class AlgoTank extends Tanque implements ObjetoVivo {

	private static AlgoTank instancia = null;

	private Arma armaSecundaria;

	private int puntaje = 0;

	private AlgoTank(Figura forma) {
		super(forma);
		setArma(new Ametralladora(this));
		this.setVelocidad(3);
		this.setVelocidadDisparo(6);
	}

	public static AlgoTank getInstancia() {
		if (instancia == null) {
			instancia = new AlgoTank(new Rectangulo(29, 29, new Vector(20, Constantes.ESCENARIO_ALTO - 29)));
		}
		return instancia;
	}

	public void setDireccion(Enum<Constantes.direccion> direccion) {
		super.setDireccion(direccion);
		getArma().setDireccion(direccion);
		if (armaSecundaria != null) {
			armaSecundaria.setDireccion(direccion);
		}
	}

	public Arma getArmaSecundaria() {
		return armaSecundaria;
	}

	public void disparar() {
		if (armaSecundaria == null) {
			super.disparar();
		}
		else {
			if (armaSecundaria.tieneMuniciones()) {
				armaSecundaria.disparar();
			}
			else {
				armaSecundaria = null;
			}
		}
	}

	public void sumarPuntaje(int cantidad) {
		puntaje = puntaje + cantidad;
	}

	public boolean hayColision(Bonus bonus) {
		if (super.hayColision((Objeto) bonus)) {
			colisionar(bonus);
			Escenario.getInstancia().quitarObjeto(bonus);
			return true;
		}
		else return false;
	}

	public boolean hayColision(Arma arma) {
		if (super.hayColision((Objeto) arma)) {
			colisionar(arma);
			Escenario.getInstancia().quitarObjeto(arma);
			return true;
		}
		else {
			return false;
		}
	}

	public boolean hayColision(Cuartel cuartel) {
		if (super.hayColision((Objeto) cuartel)) {
			return true;
		}
		else {
			return false;
		}
	}

	public void colisionar(Bonus bonus) {
		bonus.darBonus(this);
	}

	public void colisionar(Arma arma) {
		armaSecundaria = arma;
		arma.setTanque(this);
	}

	public void vivir() {

	}

}
